import { IPSCodeList } from '../../codelist/ipscode-list';
import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEAction } from '../action/ipsdeaction';
import { IPSDEField } from '../defield/ipsdefield';
import { IPSDEMainState } from '../mainstate/ipsdemain-state';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSWorkflow } from '../../wf/ipsworkflow';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEWF
 */
export interface IPSDEWF extends IPSDataEntityObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 用户数据状态代码表
   *
   * @type {IPSCodeList}
   */
  getEntityStatePSCodeList(): IPSCodeList | null;

  /**
   * 用户数据状态代码表
   *
   * @type {IPSCodeList}
   */
  get entityStatePSCodeList(): IPSCodeList | null;

  /**
   * 用户数据状态代码表（必须存在）
   *
   * @type {IPSCodeList}
   */
  getEntityStatePSCodeListMust(): IPSCodeList;

  /**
   * 流程取消状态值
   * @type {string}
   */
  entityWFCancelState: string;

  /**
   * 流程错误状态值
   * @type {string}
   */
  entityWFErrorState: string;

  /**
   * 流程结束状态值
   * @type {string}
   */
  entityWFFinishState: string;

  /**
   * 流程状态值
   * @type {string}
   */
  entityWFState: string;

  /**
   * 错误跳转主状态
   *
   * @type {IPSDEMainState}
   */
  getErrorPSDEMainState(): IPSDEMainState | null;

  /**
   * 错误跳转主状态
   *
   * @type {IPSDEMainState}
   */
  get errorPSDEMainState(): IPSDEMainState | null;

  /**
   * 错误跳转主状态（必须存在）
   *
   * @type {IPSDEMainState}
   */
  getErrorPSDEMainStateMust(): IPSDEMainState;

  /**
   * 流程完成实体行为
   *
   * @type {IPSDEAction}
   */
  getFinishPSDEAction(): IPSDEAction | null;

  /**
   * 流程完成实体行为
   *
   * @type {IPSDEAction}
   */
  get finishPSDEAction(): IPSDEAction | null;

  /**
   * 流程完成实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getFinishPSDEActionMust(): IPSDEAction;

  /**
   * 完成跳转主状态
   *
   * @type {IPSDEMainState}
   */
  getFinishPSDEMainState(): IPSDEMainState | null;

  /**
   * 完成跳转主状态
   *
   * @type {IPSDEMainState}
   */
  get finishPSDEMainState(): IPSDEMainState | null;

  /**
   * 完成跳转主状态（必须存在）
   *
   * @type {IPSDEMainState}
   */
  getFinishPSDEMainStateMust(): IPSDEMainState;

  /**
   * 流程初始化实体行为
   *
   * @type {IPSDEAction}
   */
  getInitPSDEAction(): IPSDEAction | null;

  /**
   * 流程初始化实体行为
   *
   * @type {IPSDEAction}
   */
  get initPSDEAction(): IPSDEAction | null;

  /**
   * 流程初始化实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getInitPSDEActionMust(): IPSDEAction;

  /**
   * 我的数据标题语言资源
   *
   * @type {IPSLanguageRes}
   */
  getMyWFDataCapPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 我的数据标题语言资源
   *
   * @type {IPSLanguageRes}
   */
  get myWFDataCapPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 我的数据标题语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getMyWFDataCapPSLanguageResMust(): IPSLanguageRes;

  /**
   * 我的数据标题
   * @type {string}
   */
  myWFDataCaption: string;

  /**
   * 我的工作标题语言资源
   *
   * @type {IPSLanguageRes}
   */
  getMyWFWorkCapPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 我的工作标题语言资源
   *
   * @type {IPSLanguageRes}
   */
  get myWFWorkCapPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 我的工作标题语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getMyWFWorkCapPSLanguageResMust(): IPSLanguageRes;

  /**
   * 我的工作标题
   * @type {string}
   */
  myWFWorkCaption: string;

  /**
   * 工作流对象
   *
   * @type {IPSWorkflow}
   */
  getPSWorkflow(): IPSWorkflow | null;

  /**
   * 工作流对象
   *
   * @type {IPSWorkflow}
   */
  get psWorkflow(): IPSWorkflow | null;

  /**
   * 工作流对象（必须存在）
   *
   * @type {IPSWorkflow}
   */
  getPSWorkflowMust(): IPSWorkflow;

  /**
   * 父流程实例属性
   *
   * @type {IPSDEField}
   */
  getPWFInstPSDEField(): IPSDEField | null;

  /**
   * 父流程实例属性
   *
   * @type {IPSDEField}
   */
  get pWFInstPSDEField(): IPSDEField | null;

  /**
   * 父流程实例属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getPWFInstPSDEFieldMust(): IPSDEField;

  /**
   * 处理中主状态
   *
   * @type {IPSDEMainState}
   */
  getProcessPSDEMainState(): IPSDEMainState | null;

  /**
   * 处理中主状态
   *
   * @type {IPSDEMainState}
   */
  get processPSDEMainState(): IPSDEMainState | null;

  /**
   * 处理中主状态（必须存在）
   *
   * @type {IPSDEMainState}
   */
  getProcessPSDEMainStateMust(): IPSDEMainState;

  /**
   * 代理数据存储属性
   *
   * @type {IPSDEField}
   */
  getProxyDataPSDEField(): IPSDEField | null;

  /**
   * 代理数据存储属性
   *
   * @type {IPSDEField}
   */
  get proxyDataPSDEField(): IPSDEField | null;

  /**
   * 代理数据存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getProxyDataPSDEFieldMust(): IPSDEField;

  /**
   * 代理模块存储属性
   *
   * @type {IPSDEField}
   */
  getProxyModulePSDEField(): IPSDEField | null;

  /**
   * 代理模块存储属性
   *
   * @type {IPSDEField}
   */
  get proxyModulePSDEField(): IPSDEField | null;

  /**
   * 代理模块存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getProxyModulePSDEFieldMust(): IPSDEField;

  /**
   * 用户状态属性
   *
   * @type {IPSDEField}
   */
  getUDStatePSDEField(): IPSDEField | null;

  /**
   * 用户状态属性
   *
   * @type {IPSDEField}
   */
  get uDStatePSDEField(): IPSDEField | null;

  /**
   * 用户状态属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getUDStatePSDEFieldMust(): IPSDEField;

  /**
   * 流程操作者属性
   *
   * @type {IPSDEField}
   */
  getWFActorsPSDEField(): IPSDEField | null;

  /**
   * 流程操作者属性
   *
   * @type {IPSDEField}
   */
  get wFActorsPSDEField(): IPSDEField | null;

  /**
   * 流程操作者属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWFActorsPSDEFieldMust(): IPSDEField;

  /**
   * 流程实例属性
   *
   * @type {IPSDEField}
   */
  getWFInstPSDEField(): IPSDEField | null;

  /**
   * 流程实例属性
   *
   * @type {IPSDEField}
   */
  get wFInstPSDEField(): IPSDEField | null;

  /**
   * 流程实例属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWFInstPSDEFieldMust(): IPSDEField;

  /**
   * 流程模式
   * @type {string}
   */
  wFMode: string;

  /**
   * 工作流代理模式
   * @description 值模式 [工作流实体代理模式] {0：（不使用）、 1：使用流程代理服务（客户端）、 2：提供流程代理服务（服务端） }
   * @type {( number | 0 | 1 | 2)}
   */
  wFProxyMode: number | 0 | 1 | 2;

  /**
   * 嵌入流程返回值存放属性
   *
   * @type {IPSDEField}
   */
  getWFRetPSDEField(): IPSDEField | null;

  /**
   * 嵌入流程返回值存放属性
   *
   * @type {IPSDEField}
   */
  get wFRetPSDEField(): IPSDEField | null;

  /**
   * 嵌入流程返回值存放属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWFRetPSDEFieldMust(): IPSDEField;

  /**
   * 开始流程名称
   * @type {string}
   */
  wFStartName: string;

  /**
   * 流程状态属性
   *
   * @type {IPSDEField}
   */
  getWFStatePSDEField(): IPSDEField | null;

  /**
   * 流程状态属性
   *
   * @type {IPSDEField}
   */
  get wFStatePSDEField(): IPSDEField | null;

  /**
   * 流程状态属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWFStatePSDEFieldMust(): IPSDEField;

  /**
   * 流程步骤代码表
   *
   * @type {IPSCodeList}
   */
  getWFStepPSCodeList(): IPSCodeList | null;

  /**
   * 流程步骤代码表
   *
   * @type {IPSCodeList}
   */
  get wFStepPSCodeList(): IPSCodeList | null;

  /**
   * 流程步骤代码表（必须存在）
   *
   * @type {IPSCodeList}
   */
  getWFStepPSCodeListMust(): IPSCodeList;

  /**
   * 流程步骤属性
   *
   * @type {IPSDEField}
   */
  getWFStepPSDEField(): IPSDEField | null;

  /**
   * 流程步骤属性
   *
   * @type {IPSDEField}
   */
  get wFStepPSDEField(): IPSDEField | null;

  /**
   * 流程步骤属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWFStepPSDEFieldMust(): IPSDEField;

  /**
   * 流程版本存放属性
   *
   * @type {IPSDEField}
   */
  getWFVerPSDEField(): IPSDEField | null;

  /**
   * 流程版本存放属性
   *
   * @type {IPSDEField}
   */
  get wFVerPSDEField(): IPSDEField | null;

  /**
   * 流程版本存放属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWFVerPSDEFieldMust(): IPSDEField;

  /**
   * 工作流存放属性
   *
   * @type {IPSDEField}
   */
  getWorkflowPSDEField(): IPSDEField | null;

  /**
   * 工作流存放属性
   *
   * @type {IPSDEField}
   */
  get workflowPSDEField(): IPSDEField | null;

  /**
   * 工作流存放属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getWorkflowPSDEFieldMust(): IPSDEField;

  /**
   * 默认流程实体
   * @type {boolean}
   */
  defaultMode: boolean;

  /**
   * 支持用户启动
   * @type {boolean}
   */
  enableUserStart: boolean;

  /**
   * 使用工作流代理应用
   * @type {boolean}
   */
  useWFProxyApp: boolean;
}
